from PIL import Image
import csv
import cv2
import modulos
import numpy as np
import argparse

parser = argparse.ArgumentParser(description='Criacao da base de dados orl_faces: ')
	

parser.add_argument('-np', '--npessoas',help = 'Numero de pessoas na diretoria < = 40',required =True, default =40)
parser.add_argument('-ni', '--nimagens',help = 'Numero de imagens por pessoa < = 10',required =True, default =5)

parser.add_argument('-d', '--dir',help = 'Caminho completo para a diretoria',required =True)
args = parser.parse_args()

npess = int(args.npessoas)+1
nimage = int(args.nimagens)+1
diretorio = args.dir


#pemite o print de toda a maytrix
np.set_printoptions(threshold=np.nan)

ficheiro=open('facevector.csv','wb')

writer=csv.writer(ficheiro,dialect='excel')


md = 3 	# Dimensao da mascara de gauss


#Analisa todas as imagens no endereco .... 

for i in range(1,npess):
	for j in range(1,nimage):
		file=""+diretorio+"s"+str(i)+"/"+str(j)+".pgm"
		#print file
		im = cv2.imread(file, cv2.CV_LOAD_IMAGE_GRAYSCALE)
		
		# Cria uma nova imagem com as mascaras de kirsh - auxk.png
		im = modulos.mascara_k(im)

		# le a imagem gerada pela mascara de kirsh
		imk = cv2.imread("auxk.pgm", cv2.CV_LOAD_IMAGE_GRAYSCALE)
		
		#Cria vetores para os tres valores de sigma
		for sig in [1.0,1.3,1.6]:

			k = (3.0/4.0)*sig	# Offset em relacao ao centro

			# Devolve uma mascara de gauss (G_sigma)
			img = modulos.f_gauss(md,sig)
						
			# Devolve uma mascara da derivada de gauss (G'_sigma)
			imdg = modulos.d_gauss(md,sig,k)
			
			# Devolve a Mascara de gauss (M_sigma)
			immg = modulos.m_gauss(md,img,imdg)
			
			# Cria uma nova imagem com a mascara de Gauss - aux2.png
			im1 = modulos.mascara_g(imk,immg)
			
			#Divide a imagem se x for superior 200 pixeis 
			imqua = modulos.crop("auxg.pgm")

			#Retira o histograma de cada imagem ou parte da imagem e guarda em ficheiro .csv

			for nimax in range (0,imqua):
				for nimay in range (0,imqua):
					im = Image.open("ima"+str(nimax)+str(nimay)+".pgm")
					hist = map(int,im.histogram())
					npim= np.array(hist)
					headings=("s"+str(i)+"/"+str(j),sig, "ima"+str(nimax)+str(nimay) ,npim)
					print ("s"+str(i)+"/"+str(j),sig, "ima"+str(nimax)+str(nimay))
					writer.writerow(headings)

ficheiro.close()


